home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / video / fly8111-.000 / fly8111- / fly8 / ogen.c < prev    next >
C/C++ Source or Header  |  1979-12-31  |  3KB  |  139 lines

  1. /* --------------------------------- ogen.c --------------------------------- */
  2.  
  3. /* This is part of the flight simulator 'fly8'.
  4.  * Author: Eyal Lebedinsky (eyal@ise.canberra.edu.au).
  5. */
  6.  
  7. /* Some generic object routines.
  8. */
  9.  
  10. #include "fly.h"
  11.  
  12.  
  13. /* Some generic routines for bodies.
  14. */
  15.  
  16. extern int FAR
  17. gen_init (BODY *b)
  18. {return (0);}
  19.  
  20. extern int FAR
  21. gen_read (BODY *b)
  22. {
  23.     return (shape_read (b->shape, b->title));
  24. }
  25.  
  26. extern void FAR
  27. gen_term (BODY *b)
  28. {
  29.     if (b->shape) {
  30.         if (b->shape->flags & SH_DYNVERTEX)
  31.             b->shape->v = shape_free (b->shape->v);
  32.         if (b->flags & BO_DYNSHAPE)
  33.             DEL0 (b->shape);
  34.     }
  35.     b->init = gen_init;
  36.     b->term = gen_term;
  37.     b->create = gen_nocreate;
  38.     b->delete = gen_delete;
  39.     b->dynamics = gen_nodynamics;
  40.     b->hit = gen_nohit;
  41. }
  42.  
  43. extern int FAR
  44. gen_create (OBJECT *p)
  45. {
  46.     p->color = CC_WHITE;
  47.     p->time = FOREVER;
  48.     p->flags |= F_VISIBLE;
  49.     Mident (p->T);
  50.     return (0);
  51. }
  52.  
  53. extern int FAR
  54. gen_nocreate (OBJECT *p)
  55. {return (1);}
  56.  
  57. extern void FAR
  58. gen_delete (OBJECT *p)
  59. {}
  60.  
  61. extern void FAR
  62. gen_dynamics (OBJECT *p, int interval)
  63. {
  64.     if (((st.flags1 & SF_USEG) && (p->shflags & SH_G)) ||
  65.         (p->flags & F_HIT)) {
  66.         if (iabs (p->speed) < (Uint)(VMAX-10*GACC)) {
  67.             p->V[Z] -= TADJ (GACC);
  68.             p->speed = ihypot3d (p->V);
  69.         }
  70.     }
  71.  
  72.     if (p->flags & F_HIT) {
  73.         if (FOREVER == p->time)
  74.             p->color = rand()%2 ? ST_FIRE2 : ST_FIRE1;
  75.         else
  76.             p->color = (p->time/(TIMEPSEC/10))&1
  77.                         ? ST_FIRE2 : ST_FIRE1;
  78.         if (O_PLANE == p->name) {
  79.             st.owner = p;
  80.             object_break (rand()%2, p->speed, 1, 0);
  81.         }
  82.         if (!(p->flags & F_IMPORTED) &&
  83.             p->time == FOREVER && p->R[Z] <= 0) {
  84.             p->flags |= F_DEL|F_MOD;
  85.             if (O_PLANE == p->name) {
  86.                 st.owner = p;
  87.                 object_break (rand()%16+5, p->speed,
  88.                     SH(p)->extent, 1);
  89.             }
  90.         }
  91.     } else if (O_PLANE == p->name)
  92.         plane_smoke (p);
  93.  
  94.     object_update (p, interval);
  95.  
  96.     if (p->da[X] || p->da[Y] || p->da[Z]) {
  97.         if (p->da[X]) {
  98.             p->a[X] += TADJ(p->da[X])*VONE;
  99.             if (iabs(p->a[X]) > D90) {
  100.                 p->a[X] = D180 - p->a[X];
  101.                 p->a[Y] = D180 + p->a[Y];
  102.                 p->da[X] = -p->da[X];
  103.             }
  104.         }
  105.         if (p->da[Y])
  106.             p->a[Y] += TADJ(p->da[Y])*VONE;
  107.         if (p->da[Z])
  108.             p->a[Z] += TADJ(p->da[Z])*VONE;
  109.         Mobj (p);
  110.     }
  111. }
  112.  
  113. extern void FAR
  114. gen_nodynamics (OBJECT *p, int interval)
  115. {}
  116.  
  117. extern void FAR
  118. gen_hit (OBJECT *obj, int speed, int extent, int damaging)
  119. {
  120.     if (obj->damage <= 0 && !(obj->flags & F_HIT)) {
  121.         obj->color = ST_FIRE1;
  122.         obj->flags |= F_HIT|F_MOD;
  123.         obj->time = 5*TIMEPSEC;
  124.     }
  125.  
  126.     if (obj->name == O_TARGET /*|| obj->name == O_GTARGET*/)
  127.         obj->flags |= F_DEL;    /* no notification */
  128. /* explode.
  129. */
  130.     st.owner = obj;
  131.     if (obj->damage >= -20)        /* limit vicious loops */
  132.         object_break (rand()%5 + 2, speed, extent, 0);
  133.     object_rand (obj, speed, extent, 1);
  134. }
  135.  
  136. extern void FAR
  137. gen_nohit (OBJECT *obj, int speed, int extent, int damaging)
  138. {}
  139.